using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Threading;
using Phoenix.Events;
using Phoenix.Framework;
using Phoenix.Storage;

namespace Phoenix
{
    public interface IPhoenixHost
    {
        IPhoenixHostTarget HostTarget { get; }
        IActionInvoker ActionInvoker { get; }
        void RegisterAssembly(Assembly assembly);
        IViewLocator ViewLocator { get; }
        IControllerLocator ControllerLocator { get; }
        ITransientStore ApplicationTransientState { get; }
        IEventAggregator EventAggregator { get; }
        Diagnostics.IErrorReporter ErrorReporter { get; }
        TaskScheduler AppScheduler { get; }
        Dispatcher AppDispatcher { get; }

#if WINDOWS_PHONE
        Tasks.ITaskManager TaskManager { get; }
#endif
    }
}